<?php

namespace CHOMP\SGIBundle\Services;
use Symfony\Component\HttpFoundation\Session\Session;
use Doctrine\ORM\EntityManager;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\DependencyInjection\Container;
use CHOMP\SGIBundle\Entity\Rol;
use CHOMP\SGIBundle\Entity\Permiso;
use CHOMP\SGIBundle\Entity\Autorizacion;
use CHOMP\SGIBundle\Entity\PermisoAutorizacion;
use CHOMP\SGIBundle\Entity\Usuario;
use CHOMP\SGIBundle\Entity\RolRepository;
use Doctrine\Common\Collections\ArrayCollection;
/*
use CHOMP\SGIBundle\Exception\DeletedUserException;
use CHOMP\SGIBundle\Exception\ExpiredPasswordException;
use CHOMP\SGIBundle\Exception\EmptyValueException;
use CHOMP\SGIBundle\Exception\FirstTimeLoginException;
use CHOMP\SGIBundle\Exception\InactiveUserException;
use CHOMP\SGIBundle\Exception\IncorrectPasswordException;
use CHOMP\SGIBundle\Exception\InexistentUserException;
use CHOMP\SGIBundle\Exception\LockedUserException;
use CHOMP\SGIBundle\Exception\PermissionDeniedException;
use CHOMP\SGIBundle\Exception\RolNotFoundException;
use CHOMP\SGIBundle\Exception\LDAPErrorException;
use CHOMP\SGIBundle\Exception\LDAPPasswordNotChangedException;
*/
//use CHOMP\SGIBundle\Services\Menu;
use Symfony\Component\HttpFoundation\Request;


class RolHelper
{ 
    
    /** 
     * 
     * @var Container
     */
    public $container;
    
    /**
     * @var EntityManager
     */
    public $em;
    
    /**
     * @var Session
     */
    public $session;


    public function __construct(Container $container){              
        $this->container = $container;
        $this->em = $container->get('doctrine.orm.entity_manager');
        $this->session = $container->get('session');
    }
 
    /**
     * Devuelve los permisoAutorizacion creados
     * @param string $empId
     * @return ArrayCollection
     */
    public function insertPermisosForAdministrador($empId){
        $insertedPerms = new ArrayCollection();

        // get permiso de edicion
        $perm = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(2);
        if ($perm != null){
            $aut = new Autorizacion('ALL', 'EMPRESA', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
            
            $aut = new Autorizacion('ALL', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'REPORTES', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'TIMESHEET', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'CUENTAANALITICA', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'USUARIO', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'PRIORIDAD', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'CONFIGURACION', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'SEGURIDAD', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
           
            $aut = new Autorizacion('ALL', 'WORKFLOW', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'GRUPOSOPORTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
            
            $aut = new Autorizacion('ALL', 'ESTADO', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }

        // get permiso de creacion
        $permCREAR = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(3);
        if ($permCREAR != null)  { 
            $aut = new Autorizacion('ALL', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permCREAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }
        $this->em->flush();
        return $insertedPerms;
    }

    /**
     * Devuelve los permisoAutorizacion creados
     * @param string $empId
     * @return ArrayCollection
     */
    public function insertPermisosForOperador($empId){
        $insertedPerms = new ArrayCollection();

        // get permiso ver
        $permVER = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(1);
        if ($permVER != null){
            $aut = new Autorizacion('ALL', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permVER,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }    
        
        // get permiso editar    
        $permEDITAR = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(2);
        if ($permEDITAR != null){  
            $aut = new Autorizacion('ALL', 'TIMESHEET', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('Comentario', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('Prioridad', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('GrupoSoporte', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('EstadoNoCerrado', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ResponsableCliente', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
           
            $this->em->flush();
        }
        return $insertedPerms;
    }

    /**
     * Devuelve los permisoAutorizacion creados
     * @param string $empId
     * @return ArrayCollection
     */
    public function insertPermisosForClienteExterno($empId){
        $insertedPerms = new ArrayCollection();

        // get permiso ver
        $permVER = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(1);
        if ($permVER != null){
            $aut = new Autorizacion('ALL', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permVER,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }    
        
        // get permiso de edicion  
        $permEDITAR = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(2);
        if ($permEDITAR != null){  

            $aut = new Autorizacion('Comentario', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('Prioridad', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ResponsableCliente', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('Estado', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);  
        }

        // get permiso de creacion
        $permCREAR = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(3);
        if ($permCREAR != null){   
            $aut = new Autorizacion('ALL', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permCREAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }

        $this->em->flush();
        return $insertedPerms;
    }

    /**
     * Devuelve los permisoAutorizacion creados
     * @param string $empId
     * @return ArrayCollection
     */
    public function insertPermisosForCoordinador($empId){
        $insertedPerms = new ArrayCollection();

        // get permiso ver
        $permVER = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(1);
        if ($permVER != null){
            $aut = new Autorizacion('ALL', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permVER,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        
            $aut = new Autorizacion('ALL', 'CUENTAANALITICA', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permVER,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'USUARIO', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permVER,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'PRIORIDAD', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permVER,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'GRUPOSOPORTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permVER,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }    
        
        // get permiso editar    
        $permEDITAR = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(2);
        if ($permEDITAR != null){  
            $aut = new Autorizacion('ALL', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'TIMESHEET', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permEDITAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

        }

        // get permiso de creacion
        $permCREAR = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(3);
        if ($permCREAR != null) {  
            $aut = new Autorizacion('ALL', 'INCIDENTE', $empId);
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permCREAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }

        $this->em->flush();

        return $insertedPerms;
    }

    /**
     * Devuelve los permisoAutorizacion creados
     * @param string $empId
     * @return ArrayCollection
     */
    public function insertPermisosForAdministradorRoot($empId){
        $insertedPerms = new ArrayCollection();

        // get permiso de edicion
        $perm = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(2);
        if ($perm != null){
            $aut = new Autorizacion('ALL', 'EMPRESA', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
            
            $aut = new Autorizacion('ALL', 'INCIDENTE', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'REPORTES', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'TIMESHEET', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'CUENTAANALITICA', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'USUARIO', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'PRIORIDAD', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'CONFIGURACION', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'SEGURIDAD', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
           
            $aut = new Autorizacion('ALL', 'WORKFLOW', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);

            $aut = new Autorizacion('ALL', 'GRUPOSOPORTE', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
            
            $aut = new Autorizacion('ALL', 'ESTADO', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($perm,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }

        // get permiso de creacion
        $permCREAR = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(3);
        if ($permCREAR != null)  { 
            $aut = new Autorizacion('ALL', 'INCIDENTE', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permCREAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
 
            $aut = new Autorizacion('ALL', 'EMPRESA', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permCREAR,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }

        // get permiso de eliminacion
        $permBorrar = $this->em->getRepository('CHOMPSGIBundle:Permiso')->findOneById(4);
        if ($permBorrar != null)  { 

            $aut = new Autorizacion('ALL', 'EMPRESA', 'ALL');
            $this->em->persist($aut);
            $permAut = new PermisoAutorizacion ($permBorrar,$aut);
            $this->em->persist($permAut);
            $insertedPerms->add($permAut);
        }
        $this->em->flush();
        return $insertedPerms;
    }


}

